package Merlion.SCM.bean;

import Merlion.SCM.entity.PickingOrderEntity;
import Merlion.util.state.DeliveryOrderState;
import Merlion.util.state.LineEntryState;
import Merlion.util.state.PickingOrderState;
import java.util.Date;
import java.util.List;
import javax.ejb.Remote;

@Remote
public interface InventoryMovementsManagementBeanRemote {
    /*
    public ReservationEntity createReservation(Long salesDocumentId);
    
    public void withdrawReservation(Long salesDocumentId);
     * */

    public void executeWeeklyIndividualRequirement(Integer yearInt, Integer monthInt, Integer weekOfMonth, Date receiptDate, String remarks);

    public void addInventoryBatchToWarehouse(Long batchId, Long warehouseId);

    public void addProductBatchToWarehouse(Long batchId, Long warehouseId);

    public void addMaterialBatchToWarehouse(Long batchId, Long warehouseId);

    public void discardProductBatchFromWarehouse(Long batchId, Long warehouseId, String remarks);

    public void discardMaterialBatchFromWarehouse(Long batchId, Long warehouseId, String remarks);

    public Long createDeliveryOrder(Long salesOrderId, Long clientId, Long contactId, Date dateIssued, List<LineEntryState> lineEntryStateList,
            Long billingId, Long shippingId, String description, String documentName,
            String shippingMethod, String shippingRule, String paymentMethod, String freightCostRule, String pricingType);

    public void updateDeliveryOrder(Long doId, Long salesOrderId, Long clientId, Long contactId, Date dateIssued,
            String description, String documentName, String shippingMethod,
            String shippingRule, String paymentMethod, String freightCostRule,
            String pricingType, String status, Long billingId, Long shippingId);

    public void executeDeliveryOrder(Long doId, String shippingCompany);

    public void withdrawDeliveryOrder(Long doId);

    public List<DeliveryOrderState> viewDeliveryOrders();

//    public DeliveryOrderState searchDeliveryOrder(String field, String parameter);

    public PickingOrderEntity createPickingOrder(Long doId, String pickingRoute, String pickingMethod, 
            Date issueDate, Date dueDate, Long collectionWarehouseId, int shipGroup);

 //   public void updatePickingOrder();

   // public void withdrawPickingOrder(Long orderId);

    public List<PickingOrderState> viewPickingOrders();

    public PickingOrderState searchPickingOrder();

    public Merlion.util.state.WarehouseInventoryState viewWarehouseInventory(long warehouseId);

    public List<Merlion.util.state.InventoryState> viewUnhousedInventory();

    public java.util.List<Merlion.util.state.PickingOrderEntryState> viewPickingOrderEntries(java.lang.Long id);

    public void withdrawPickingOrder(java.lang.Long id);

    public void updatePickingOrder(java.lang.Long id, java.lang.String pickingRoute, java.lang.String pickingMethod, java.util.Date issueDate, java.util.Date dueDate, java.lang.Long collectionWarehouseId, java.lang.String status);

   // public void editPickingOrderEntry(java.lang.Long id, java.lang.String status, java.lang.Long warehouseId, java.util.Date pickingDate, int requested, int picked);

    public void editPickingOrderEntry(java.lang.Long id, java.lang.String status, java.lang.Long warehouseId, java.util.Date pickingDate);

    public void executePickingOrder(java.lang.Long poeId);

    public java.util.List<Merlion.util.state.InventoryMovementState> viewInventoryMovementLog();

    public void removePickingOrderEntryFromPickingList(java.lang.Long poeId, java.lang.Long entryId);

    public Merlion.util.state.DeliveryOrderState searchDeliveryOrder(java.lang.Long id);

    public void deleteDeliveryOrder(java.lang.Long doId);
}
